package com.csit.util;

import java.lang.reflect.Method;

/**
 * @author longweier
 * @Description: 利用反射技术对Bean实体类的属性进行get, set操作
 * @Copyright: 福州骏华科技信息有限公司 (c)2012
 * @Created Date : 2012-3-29
 * @vesion 1.0
 */
public class BeanUtil {

	/**
	 * @param bean
	 * @param property
	 * @return
	 * @throws Exception
	 * @Description: Bean的get方法
	 * @Create: 2012-3-29 下午10:22:40
	 * @author longweier
	 * @update logs
	 */
	@SuppressWarnings("unchecked")
	public static Object getBeanPropertyValue(Object bean, String property) {

		if (bean == null) {
			return null;
		}

		if (property == null) {

		}

		Object object = null;

		try {
			Class clazz = bean.getClass();

			StringBuilder methodName = new StringBuilder("get");
			methodName.append(property.substring(0, 1).toUpperCase()).append(property.substring(1));

			//本来可以采用getDeclaredMethod，但是这个方法只能取到自己本地的方法，不能获取到父类的方法
			Method method = clazz.getMethod(methodName.toString());

			method.setAccessible(true);

			object = method.invoke(bean);

			method.setAccessible(false);

		} catch (Exception e) {

			e.printStackTrace();
		}

		return object;
	}

	/**
	 * @param bean
	 * @param property
	 * @param value
	 * @throws Exception
	 * @Description: Bean实体类的set方法
	 * @Create: 2012-3-29 下午10:32:13
	 * @author longweier
	 * @update logs
	 */
	@SuppressWarnings("unchecked")
	public static void setBeanPropertyValue(Object bean, String property, Object value) {

		if (bean == null) {
			return;
		}

		if (property == null) {
			return;
		}

		try {

			Class clazz = bean.getClass();

			StringBuilder methodName = new StringBuilder("set");

			methodName.append(property.substring(0, 1).toUpperCase()).append(property.substring(1));

			Method method = clazz.getMethod(methodName.toString(), value.getClass());

			method.setAccessible(true);

			method.invoke(bean, value);

			method.setAccessible(false);

		} catch (Exception e) {

			e.printStackTrace();
		}


	}

}
